import json
import re
import os


def load_table_info_from_json(file_path="oracle_table_info.json"):
    """从 JSON 文件加载表信息"""
    try:
        if not os.path.exists(file_path):
            print(f"文件 {file_path} 不存在")

        with open(file_path, 'r', encoding='utf-8') as f:
            table_info = json.load(f)

        print(f"从 {file_path} 加载了 {len(table_info)} 个表的信息")
        return table_info

    except Exception as e:
        print(f"加载表信息时出错: {e}")
        import traceback
        traceback.print_exc()
        return {}


def clean_sql_query(sql):
    """清理 SQL 查询，移除分号和其他可能导致问题的字符"""
    # 移除末尾分号
    sql = sql.strip()
    if sql.endswith(';'):
        sql = sql[:-1]

        # 移除多行注释
    sql = re.sub(r'/\*.*?\*/', '', sql, flags=re.DOTALL)

    # 移除单行注释
    sql = re.sub(r'--.*?$', '', sql, flags=re.MULTILINE)

    # 替换多个空格为单个空格
    sql = re.sub(r'\s+', ' ', sql)

    return sql.strip()

def extract_sql_from_markdown(markdown_text: str) -> str:
    """
    从 Markdown 文本中提取 ```sql 和 ``` 标签之间的 SQL 代码块。

    参数：
    - markdown_text: str，Markdown 文本，其中包含 ```sql ... ``` 的代码块。

    返回：
    - str，提取的 SQL 代码。如果没有找到代码块，返回空字符串。
    """
    # 定义正则模式，匹配 ```sql ... ``` 之间的内容
    sql_pattern = r"```sql\s(.*?)```"

    # 搜索模式，并支持多行匹配
    match = re.search(sql_pattern, markdown_text, re.DOTALL)

    if match:
        # 返回捕获组中的 SQL 代码部分，并去除多余空格
        result = match.group(1).strip()
        result = clean_sql_query(result)
        return result
    else:
        # 如果没有找到，返回空字符串
        return ""